#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @Project : chat_model 
# @File    : file_util.py
# @IDE     : PyCharm 
# @Author  :ZH
# @Time    : 2025/1/13 10:12
import hashlib
from typing import Optional

from fastapi import UploadFile


async def calculate_md5(file: UploadFile) -> Optional[str]:
    """计算给定 UploadFile 对象的内容的 MD5 哈希值。

    Args:
        file (UploadFile): 从客户端上传的文件。

    Returns:
        Optional[str]: 文件内容的 MD5 哈希值，如果没有内容则返回 None。
    """
    # 初始化 MD5 对象
    hash_md5 = hashlib.md5()

    # 逐块读取文件内容并更新 MD5 对象
    while chunk := await file.read(8192):
        hash_md5.update(chunk)

    # 将文件指针重置到文件开头
    await file.seek(0)

    # 获取并返回 MD5 哈希值
    return hash_md5.hexdigest()

